<?php
/**
 * 文件内容合并工具 - Windows命令行版本
 * 遍历指定目录下的文件，合并.html、.js、.css、.php、.txt文件内容到单个txt文件
 */

/**
 * 合并指定目录下的文件内容
 * @param array $scanDirs 要扫描的目录路径数组
 * @param string $outputFile 合并后的输出文件路径
 * @param array $allowedExtensions 允许合并的文件扩展名数组
 */
function mergeFiles($scanDirs, $outputFile, $allowedExtensions) {
    echo "开始合并文件...\n";
    
    // 初始化合并内容
    $mergedContent = "文件内容合并结果生成于: " . date('Y-m-d H:i:s') . "\n\n";
    $mergedContent .= "===============================================\n\n";
    
    $totalFiles = 0;
    $totalSize = 0;
    
    foreach ($scanDirs as $scanDir) {
        if (!is_dir($scanDir)) {
            echo "警告: 目录不存在 - {$scanDir}\n";
            continue;
        }
        
        echo "正在扫描目录: {$scanDir}\n";
        
        try {
            // 创建目录迭代器
            $directory = new RecursiveDirectoryIterator($scanDir);
            $iterator = new RecursiveIteratorIterator($directory);
            
            // 遍历所有文件
            foreach ($iterator as $fileinfo) {
                // 跳过目录
                if (!$fileinfo->isFile()) {
                    continue;
                }
                
                // 检查文件扩展名
                $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
                if (!in_array($extension, $allowedExtensions)) {
                    continue;
                }
                
                $filePath = $fileinfo->getPathname();
                $fileSize = $fileinfo->getSize();
                
                // 读取文件内容
                $content = @file_get_contents($filePath);
                if ($content === false) {
                    echo "警告: 无法读取文件 - {$filePath}\n";
                    continue;
                }
                
                // 添加文件信息和内容
                $mergedContent .= "[文件]: {$filePath}\n";
                $mergedContent .= "[大小]: {$fileSize} bytes\n";
                $mergedContent .= "-----------------------------------------------\n";
                $mergedContent .= $content . "\n\n";
                $mergedContent .= "===============================================\n\n";
                
                $totalFiles++;
                $totalSize += $fileSize;
                
                echo "已处理: {$filePath}\n";
            }
        } catch (Exception $e) {
            echo "错误: 处理目录时出错 - {$scanDir}\n";
            echo $e->getMessage() . "\n";
        }
    }
    
    // 写入合并内容到输出文件
    if (file_put_contents($outputFile, $mergedContent) !== false) {
        echo "\n合并完成:\n";
        echo "- 处理文件数: {$totalFiles}\n";
        echo "- 总大小: {$totalSize} bytes\n";
        echo "- 输出文件: {$outputFile}\n";
    } else {
        echo "\n错误: 无法写入输出文件 - {$outputFile}\n";
    }
}

// 配置参数
$scanDirs = [
    __DIR__ . DIRECTORY_SEPARATOR . 'codes',
    __DIR__ . DIRECTORY_SEPARATOR . 'pages'
];
$allowedExtensions = ['html', 'js', 'css', 'php', 'txt'];
$outputFile = __DIR__ . DIRECTORY_SEPARATOR . 'merged_files.txt';

// 执行合并
mergeFiles($scanDirs, $outputFile, $allowedExtensions);
